// let z={name:"zero",height:()=>{return "180cm"}};
// let a={name:"kevin",height:()=>{return "180cm"},z:z};
// let b=a;
// let c=cloneObj(a);
// let d=deepCloneObj(a);
// console.log(a);
// console.log(b);
// console.log(c);
// console.log(d);
// console.log(d===a);
// console.log(a.bbb);
//对象浅拷贝
//缺点：
//1.这种方法会忽略值为function以及undefied的字段，而且对date类型的支持也不太友好。
function cloneObj(obj){
    return JSON.parse(JSON.stringify(obj));
}


//对象深拷贝
function deepCloneObj(obj){
    //判断是否为空
    if(obj === null)return null;
    //判断是否不等于对象
    if(typeof obj !== 'object') return obj;
    //判断是否为Date对象
    if(obj.constructor === Date) return new Date(obj);
    //新建对象
    let newObj =new obj.constructor();
    for(let key in obj){
       let val= obj[key];
       console.log(typeof val);
       newObj[key]=typeof val=== 'object'?arguments.callee(val):val;
    }
    return newObj;
}


/*
获取 url 中的参数
1. 指定参数名称，返回该参数的值 或者 空字符串
2. 不指定参数名称，返回全部的参数对象 或者 {}
3. 如果存在多个同名参数，则返回数组
 */
function getUrlParam(sUrl, sKey) {
    let str=sUrl.substr(0,sUrl.indexOf("#")).substr(sUrl.indexOf("?")+1);
    let params=str.split("&");
    let rs={};
    for(let i=0;i<params.length;i++){
        let param=params[i].split("=");
        let key=param[0];
        let val=param[1];
        if(rs[key]){
            if(rs[key] instanceof Array){
                rs[key].push(val);
            }else{
                let a=rs[key];
                rs[key]=[a,val];
            }  
        }else{
            rs[key]=val;
        }
    }
    if(sKey){
        return rs[sKey]?rs[sKey]:"";
    }else{
        return rs;
    }
}


// let a=getUrlParam("http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe" , "key")
// console.log("a",a);


/**
 * 如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。
 * @param {string} obj 
 * @returns {string}
 */
function arrayToParam(obj){
    const keys=Object.keys(obj);
    let str="";
    for (const key of keys) {
        const arr=obj[key];
        const keytpl=`&${key}=`;
        if( arr instanceof Array){
            str+=keytpl+arr.join(keytpl)
        }
    }
    return str;

}

const a={foo:["bar1", "bar2"],foo2:["bar1", "bar2"]};
let b=arrayToParam(a);
console.log(b);

/**
 * 
 */
function strNumToArr(str){
    return str.split("");//一定要传空字符串，否则不会逐个拆分
}